Contemporary video compression algorithms require significant memory bandwidth for referencing previously decoded images. A decoder memory buffer is used to maintain a number of previously decoded image frames, termed reference frames, ready for display so these frames may be used as references in decoding other image frames. Due to the development and availability of high definition video, the rate at which the data in the decoder memory buffers are transferred has substantially increased. In addition, the decoder memory buffer may provide data blocks that are substantially larger than that required by the decoder to process a particular image block, thereby increasing the memory bandwidth without benefit.
Motion prediction is a commonly used technique for encoding video images. According to conventional video encoding techniques employing motion prediction, successive images are compared and the motion of a particular area in one image relative to another image is determined to generate motion vectors. A “macroblock” is a term used in video compression for such an area; typically a macroblock represents a block of 16×16 pixels. Different picture formats utilize different numbers of pixels and macroblocks. For example, a 1920×1088 HDTV pixel format includes 120×68 macroblocks. To decode a video bitstream, a decoder shifts blocks in a previous picture according to the respective motion vectors to generate the next image. This process is based on the use of intracoded frames, forward predicted frames and bi-directional coded frames as is known in the art.
In some video decoder systems, motion prediction (MP) caches are used to limit the data transfer rate from the memory buffer. An MP cache stores image pixel values for previously decoded macroblocks that may be useful for subsequent macroblocks to be decoded. An MP cache is typically limited in capacity and expensive in comparison to an external memory buffer. An MP cache typically includes only a small portion of the pixel data necessary for a single video frame. Consequently, data in an MP cache is quickly replaced as new macroblocks or parts of macroblocks are written to the cache.
In video decoders, for every macroblock, a set of motion vectors are decoded from a video bitstream and translated into addresses of pixels in the reference frame memory buffers. The pixels are then requested from the memory when they are needed, and are expected to return within a macroblock time period. The time elapsed between the request and the return of the imaging information is called the latency. The latency of a memory system from which the pixels are requested can often be quite high. In such a case the reference image data return slows down the video decoding process, which may cause some frames to be unable to be completed on time for display and, as a result, the frames are dropped. This can lead to a choppy playback. The motion prediction operation is well known to be a major source of the memory read latency bottleneck of a decoder memory system. Accordingly, improvements in memory use and reducing the bottleneck of the system are desired.